package com.aura.springbook.model;

import com.aura.springbook.common.enums.BorrowStatusEnum;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 借阅记录实体类
 * <p>
 * 对应数据库表：borrow_record
 * <p>
 * 字段说明：
 * - id: 主键，自增
 * - userId: 借阅人ID
 * - bookId: 图书ID
 * - borrowTime: 借阅时间
 * - returnTime: 归还时间（null表示未归还）
 * - status: 状态（0-未归还，1-已归还）
 * - createTime: 创建时间，自动填充
 * - updateTime: 更新时间，自动填充
 */
@Data
@TableName("borrow_record")
public class BorrowRecord {

    /**
     * 主键
     * <p>
     * 数据库自增主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 借阅人ID
     * <p>
     * 关联User表的主键
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 图书ID
     * <p>
     * 关联Book表的主键
     */
    @TableField("book_id")
    private Long bookId;

    /**
     * 借阅时间
     * <p>
     * 记录图书被借阅的时间
     */
    @TableField("borrow_time")
    private LocalDateTime borrowTime;

    /**
     * 归还时间（null表示未归还）
     * <p>
     * 记录图书被归还的时间，未归还时为null
     */
    @TableField("return_time")
    private LocalDateTime returnTime;

    /**
     * 状态（0-未归还，1-已归还）
     * <p>
     * 借阅记录的状态，使用BorrowStatusEnum枚举表示
     */
    @TableField("status")
    private Integer status;

    /**
     * 创建时间
     * <p>
     * 记录借阅记录的创建时间，由MyBatis-Plus自动填充
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     * <p>
     * 记录借阅记录的最后更新时间，由MyBatis-Plus自动填充
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 获取借阅状态枚举
     * <p>
     * 将整数类型的状态转换为BorrowStatusEnum枚举
     *
     * @return 借阅状态枚举
     */
    public BorrowStatusEnum getStatusEnum() {
        return BorrowStatusEnum.fromCode(this.status);
    }

    /**
     * 设置借阅状态
     * <p>
     * 通过BorrowStatusEnum枚举设置借阅状态
     *
     * @param statusEnum 借阅状态枚举
     */
    public void setStatusEnum(BorrowStatusEnum statusEnum) {
        this.status = statusEnum.getCode();
    }
}